import { ElMessage, ElMessageBox, ElNotification, ElLoading } from 'element-plus'
import {isNull} from "@/utils/validate.js";

let loadingInstance;

export default {
  // 消息提示
  msgInfo(content) {
    ElMessage.info({
      message: content,
      showClose: true,
      duration: 5*1000,
    })
  },
  // 错误消息
  msgError(content) {
    ElMessage.error({
      message: content,
      showClose: true,
      duration: 5*1000,
    })
  },
  // 成功消息
  msgSuccess(content) {
    ElMessage.success(content)
  },
  // 警告消息
  msgWarning(content) {
    ElMessage.warning({
      message: content,
      showClose: true,
      duration: 5*1000,
    })
  },
  // 弹出提示
  alert(content) {
    ElMessageBox.alert(content, "系统提示")
  },
  // 错误提示
  alertError(content) {
    ElMessageBox.alert(content, "系统提示", { type: 'error' })
  },
  // 成功提示
  alertSuccess(content) {
    ElMessageBox.alert(content, "系统提示", { type: 'success' })
  },
  // 警告提示
  alertWarning(content) {
    ElMessageBox.alert(content, "系统提示", { type: 'warning' })
  },
  // 通知提示
  notify(content) {
    ElNotification.info(content)
  },
  // 错误通知
  notifyError(content) {
    ElNotification.error(content);
  },
  // 成功通知
  notifySuccess(content) {
    ElNotification.success(content)
  },
  // 警告通知
  notifyWarning(content) {
    ElNotification.warning(content)
  },
  // 确认窗体
  confirm(content) {
    return ElMessageBox.confirm(content, "系统提示", {
      confirmButtonText: '确定',
      cancelButtonText: '取消',
      type: "warning",
    })
  },

  /**
   * 处理 弹出确认框后继续执行其他的业务逻辑
   * @param message 必选参数
   * @param confirmFunction 必选参数，确认后执行的js函数名
   * @param params 可选参数，确认后执行的js函数所需的参数
   * @param handleSuccessFunction 可选参数，confirmFunction函数执行成功后继续执行的js函数
   * @param successParams 可选参数，handleSuccessFunction函数所需的参数
   */
  confirmAndExecuteJS(message, confirmFunction, params, handleSuccessFunction, successParams) {
    this.confirm(message).then(() => {
      this.loading('正在执行，请稍后...')
      return confirmFunction(params)
    }).then(() => {
      this.closeLoading()
      handleSuccessFunction(successParams)
    }).catch((error) => {
      this.closeLoading()
    })
  },

  // 提交内容
  prompt(content) {
    return ElMessageBox.prompt(content, "系统提示", {
      confirmButtonText: '确定',
      cancelButtonText: '取消',
      type: "warning",
    })
  },
  // 打开遮罩层
  loading(content) {
    loadingInstance = ElLoading.service({
      lock: true,
      text: content,
      background: "rgba(0, 0, 0, 0.7)",
    })
  },
  // 关闭遮罩层
  closeLoading() {
    if (!isNull(loadingInstance)) {
      loadingInstance.close();
    }
  }

}
